package com.ch_linghu.fanfoudroid.db;

import java.text.ParseException;

import android.database.Cursor;
import android.provider.BaseColumns;
import android.util.Log;

import com.ch_linghu.fanfoudroid.data.Dm;

/**
 *  Table - Direct Messages
 *
 */
public final class MessageTable implements BaseColumns {
    
    public static final String TAG = "MessageTable";
    
    public static final int TYPE_GET  = 0;
    public static final int TYPE_SENT = 1;
    
    public static final String TABLE_NAME = "message";
    public static final int MAX_ROW_NUM = 20;
    
    public static final String FIELD_USER_ID = "uid";
    public static final String FIELD_USER_SCREEN_NAME = "screen_name";
    public static final String FIELD_PROFILE_IMAGE_URL = "profile_image_url";
    public static final String FIELD_CREATED_AT = "created_at";
    public static final String FIELD_TEXT = "text";
    public static final String FIELD_IN_REPLY_TO_STATUS_ID = "in_reply_to_status_id";
    public static final String FIELD_IN_REPLY_TO_USER_ID = "in_reply_to_user_id";
    public static final String FIELD_IN_REPLY_TO_SCREEN_NAME = "in_reply_to_screen_name";
    public static final String FIELD_IS_UNREAD = "is_unread";
    public static final String FIELD_IS_SENT = "is_send";
    
    public static final String[] TABLE_COLUMNS = new String[] { _ID,
        FIELD_USER_SCREEN_NAME, FIELD_TEXT, FIELD_PROFILE_IMAGE_URL,
        FIELD_IS_UNREAD, FIELD_IS_SENT, FIELD_CREATED_AT, FIELD_USER_ID };
    
    public static final String CREATE_TABLE =  "CREATE TABLE "
        + TABLE_NAME + " (" 
        + _ID + " text primary key on conflict replace, " 
        + FIELD_USER_SCREEN_NAME + " text not null, "
        + FIELD_TEXT + " text not null, "
        + FIELD_PROFILE_IMAGE_URL + " text not null, "
        + FIELD_IS_UNREAD + " boolean not null, "
        + FIELD_IS_SENT + " boolean not null, "
        + FIELD_CREATED_AT + " date not null, " 
        + FIELD_USER_ID + " text)";
    
    /**
     * TODO: 将游标解析为一条私信
     * 
     * @param cursor 该方法不会关闭游标
     * @return 成功返回Dm类型的单条数据, 失败返回null
     */
    public static Dm parseCursor(Cursor cursor) {
        
        if (null == cursor || 0 == cursor.getCount()) {
            Log.w(TAG, "Cann't parse Cursor, bacause cursor is null or empty.");
            return null;
        }
        
        Dm dm = new Dm();
        
        dm.id = cursor.getString(cursor.getColumnIndex(MessageTable._ID));
        dm.screenName = cursor.getString(cursor.getColumnIndex(MessageTable.FIELD_USER_SCREEN_NAME));
        dm.text = cursor.getString(cursor.getColumnIndex(MessageTable.FIELD_TEXT));
        dm.profileImageUrl = cursor.getString(cursor.getColumnIndex(MessageTable.FIELD_PROFILE_IMAGE_URL));
        dm.isSent = (0 == cursor.getInt(cursor.getColumnIndex(MessageTable.FIELD_IS_SENT))) ? false : true ;
        try {
            dm.createdAt = TwitterDatabase.DB_DATE_FORMATTER.parse(cursor.getString(cursor.getColumnIndex(MessageTable.FIELD_CREATED_AT)));
        } catch (ParseException e) {
            Log.w(TAG, "Invalid created at data.");
        }
        dm.userId = cursor.getString(cursor.getColumnIndex(MessageTable.FIELD_USER_ID));
        
        return dm;
    }
}